package scrshotcombine

import (
	"github.com/signintech/gopdf"
	"image"
	"image/color"
	"image/draw"
)

const pdf_pad_px = 20

// 保存合并的截图为pdf，生成单页pdf
// 如果是多页模式，即引用部分，则添加上下左右空白，但仍生成单页pdf
func savePdf(img image.Image, multiPage bool, savePath string) {
	// 如果是多页模式，即引用部分，手动添加上下左右空白
	if multiPage {
		newW := img.Bounds().Dx() + 2*pdf_pad_px
		newH := img.Bounds().Dy() + 2*pdf_pad_px
		bgImg := image.NewRGBA(image.Rect(0, 0, newW, newH))
		draw.Draw(bgImg, bgImg.Bounds(), &image.Uniform{C: color.Gray16{Y: 0xFFFF}}, image.Point{}, draw.Src)
		draw.Draw(bgImg, image.Rect(20, 20, newW, newH), img, image.Pt(0, 0), draw.Over)
		img = bgImg
	}

	// 如果图片大小未超过a4大小，则页面大小为a4大小，且水平方向居中；否则使用自定义页面大小，即图片本身大小
	// 图片大小为像素，pdf单位为pt，需要转换(gopdf.ImgReactagleToWH)
	ptW, ptH := gopdf.ImgReactagleToWH(img.Bounds())
	var pageSize *gopdf.Rect
	customPageSize := false
	startX := float64(0)
	if ptW <= gopdf.PageSizeA4.W && ptH <= gopdf.PageSizeA4.H {
		startX = (gopdf.PageSizeA4.W - ptW) / 2
		pageSize = gopdf.PageSizeA4
	} else {
		customPageSize = true
		pageSize = &gopdf.Rect{
			W: ptW,
			H: ptH,
		}
	}

	// 创建边距为0的页面，并把图片加入
	pdf := gopdf.GoPdf{}
	defer pdf.Close()
	pdf.Start(gopdf.Config{
		Unit:     gopdf.UnitPT,
		PageSize: *pageSize,
	})
	pdf.SetMargins(0, 0, 0, 0)
	pdf.AddPage()
	var rect *gopdf.Rect = nil
	if customPageSize {
		rect = &gopdf.Rect{W: ptW, H: ptH}
	}
	if err := pdf.ImageFrom(img, startX, 0, rect); nil != err {
		panic(err)
	}
	pdf.WritePdf(savePath)
}
